package com.cwnu.sw.cys.core.common.domain.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * 公共枚举类，用于表示“是”或“否”的状态及其描述。
 *
 * @author jisam
 * @version 1.0
 * @contact "jisamchan@outlook.com"
 * @date 24/03/2025
 */
@AllArgsConstructor
@Getter
public enum YesOrNoEnum {
    /**
     * 表示“否”的状态，状态值为0，描述为“否”
     */
    NO(0, "否"),

    /**
     * 表示“是”的状态，状态值为1，描述为“是”
     */
    YES(1, "是");

    /**
     * 状态值
     */
    private final Integer status;

    /**
     * 状态描述
     */
    private final String desc;

    /**
     * 用于缓存枚举值与状态值的映射关系
     */
    private static final Map<Integer, YesOrNoEnum> CACHE;

    static {
        // 初始化缓存，将枚举值与状态值进行映射
        CACHE = Arrays.stream(YesOrNoEnum.values()).collect(Collectors.toMap(YesOrNoEnum::getStatus, Function.identity()));
    }

    /**
     * 根据状态值获取对应的枚举实例。
     *
     * @param type 状态值
     * @return 对应的枚举实例，如果找不到则返回null
     */
    public static YesOrNoEnum of(Integer type) {
        return CACHE.get(type);
    }

    /**
     * 将布尔值转换为对应的状态值。
     *
     * @param bool 布尔值
     * @return 如果布尔值为true，返回“是”的状态值；否则返回“否”的状态值
     */
    public static Integer toStatus(Boolean bool) {
        return bool ? YES.getStatus() : NO.getStatus();
    }
}

